7장. 모델 자체를 살짝 손보기
출처: 『AI 엔지니어링』(Chip Huyen 지음, 한국어판) 7장 대응 | 원서: AI Engineering (O'Reilly)
코드는 분위기만 — Python·숫자·import 같은 말은 몰라도 됩니다. 표의 '비유'와 '위험'만 봐도 충분해요.
0장에서 파인튜닝을 "경력직 재교육" 으로 배웠다.
이미 일머리가 있는 모델에게, 우리 회사 규칙만 며칠 더 가르치는 일이었다.
이 장은 그 재교육을 실제로 할 때 무슨 일이 벌어지는지 본다.
언제 재교육이 필요한지, 그리고 재교육이 왜 그렇게 무거운지를 쉬운 말로 푼다.
0. 이 장의 새 단어
0장에 없던 말 세 개만 먼저 푼다.
이 세 개만 알면 이 장 전체가 풀린다.
각 단어는 [한 문장 뜻 + 일상비유 + 한 줄 예] 3종으로 적었다.
가중치(weight)
한 문장 뜻 — 모델이 학습하며 머릿속에 새겨 둔 숫자 덩어리. 이 숫자를 바꾸는 게 곧 모델을 가르치는 일이다.
일상비유 — 요리사 머릿속의 손맛 수치. "소금 한 꼬집은 3그램" 같은 감각이 수백억 개 모인 것. 재교육이란 이 수치를 살짝살짝 고쳐 쓰는 일이다.
한 줄 예 —
# 모델 = 거대한 숫자(가중치) 묶음. 가르치면 이 숫자가 바뀐다
weights = model.get_weights() # 예: 70억 개의 숫자
메모리 병목(memory bottleneck)
한 문장 뜻 — 가중치를 가르치려면 작업 책상(메모리)이 모자라서 일이 막히는 현상. 파인튜닝이 어려운 가장 큰 이유다.
일상비유 — 좁은 부엌. 재료(가중치)는 많은데 도마(메모리)가 작아서 한꺼번에 못 펼친다. 책상이 좁으면 요리가 막힌다.
한 줄 예 —
# 모델을 가르치려는데 책상(GPU 메모리)이 모자라 멈춤
finetune(model) # → "메모리 부족" 에러로 중단
부분만 고치기(LoRA)
한 문장 뜻 — 가중치 전부가 아니라 아주 작은 일부만 새로 학습해, 좁은 책상에서도 재교육을 끝내는 방법.
일상비유 — 옷 전체를 새로 짓지 않고 단추만 바꾸기. 옷(모델)은 그대로 두고, 작은 부속(부분 가중치)만 갈아 끼워 분위기를 바꾼다.
한 줄 예 —
# 전체가 아니라 작은 부속만 학습 → 좁은 책상에서도 됨
finetune(model, only="작은_부속") # 메모리 적게 씀
(귀납 도입) 이런 적 있죠?
말로 시키는 것(프롬프트)으로 다 될 줄 알았다.
회사 보고서 양식을 시켰더니, 모델이 매번 양식을 조금씩 흐트러뜨렸다.
주문서(프롬프트)를 아무리 또렷하게 고쳐 써도 끝내 딱 맞지 않았다.
말로 시키는 데 한계가 온 것이다.
이럴 때 모델 자체를 살짝 더 가르치는 일, 그게 파인튜닝이다.
그런데 막상 가르치려 하니 컴퓨터가 "책상이 모자라요" 하며 멈췄다.
# 양식이 자꾸 흐트러져서 모델을 직접 가르치려 했더니
finetune(model, our_examples)
# → "메모리 부족" 으로 중단됨
여기서 두 가지 질문이 생긴다.
첫째, 애초에 이걸 파인튜닝으로 풀어야 했나? (다른 길은 없었나?)
둘째, 책상이 모자라는 문제는 어떻게 넘기나?
이 장은 이 두 질문에 답한다.
한 문장 정의 — 파인튜닝은 모델의 가중치를 직접 조금 고쳐 우리 일에 맞추는 일이며, 말(프롬프트)로 안 되는 깊은 조정에 쓰지만 메모리 병목이 늘 발목을 잡는다.
이 장에서 딱 3가지만
이 장에서 딱 3가지만 — ① 언제 고칠까 — 모델이 사실을 몰라서 틀리면 자료를 붙여 주고(RAG), 행동 방식이 틀리면 모델을 가르친다(파인튜닝). ② 왜 무거울까 — 가르치는 일(학습)은 쓰는 일(추론)보다 책상(메모리)이 몇 배 더 든다. 이게 메모리 병목이다. ③ 어떻게 가볍게 할까 — 전부 고치지 말고 작은 부속만 고친다(부분만 고치기 = LoRA). 숫자 정밀도도 낮춘다(양자화).
개념 1 — 언제 고칠까: 사실이냐 행동이냐
망가지는 장면
사내 문서 챗봇이 자꾸 틀린 답을 냈다.
팀에서 바로 외쳤다. "모델이 못하니까 가르치자(파인튜닝)!"
그런데 알고 보니 모델은 우리 회사 문서를 본 적이 없었다.
머리에 없는 걸 가르친 게 아니라, 자료를 안 펴 줬을 뿐이었다.
이건 가르칠 문제가 아니라 자료를 붙여 줄 문제였다.
일상비유
학생이 시험을 틀렸을 때를 떠올려 보자.
내용을 몰라서 틀렸으면 교과서를 펴 주면 된다(오픈북 = RAG).
아는데 답안 형식을 자꾸 틀리면 형식을 따로 연습시킨다(재교육 = 파인튜닝).
원인이 다르면 처방도 다르다.
| 비유 | 코드 | 위험 |
|---|---|---|
| 내용을 모름 → 교과서 펴 줌 | ask(prompt + 찾아온_문서) |
자료만 붙이면 됨 — 가르칠 필요 없음 |
| 형식을 자꾸 틀림 → 따로 연습 | finetune(model, 양식_예시) |
무거운 재교육 — 진짜 필요할 때만 |
| 원인 안 가리고 무조건 가르침 | finetune(model) |
돈·시간 낭비, 다른 능력만 망가짐 |
한 문장 정의 — 파인튜닝은 행동 방식(형식·말투)을 고치는 일이고, RAG는 사실(내부·최신 정보)을 보충하는 일이며, 틀린 원인이 둘 중 무엇인지부터 가려야 한다.
예시 폭격
예시 1 — 완성예(따라 읽기).
상황: 회사 환불 규정을 물으니 모델이 없는 규정을 지어낸다.
원인 가리기: 모델이 우리 규정을 모른다 → 사실 문제.
처방: 자료를 붙여 준다.
# 사실을 모름 → 가르치지 말고 자료를 펴 준다(RAG)
docs = search("환불 규정")
model.ask(prompt + docs)
가르치지 않고도 해결됐다. 가장 가벼운 길로 끝났다.
예시 2 — 부분완성(빈칸 채우기).
상황: 모델이 답은 맞는데 매번 보고서 양식을 흐트러뜨린다.
원인 가리기: 내용은 맞다. 형식만 틀린다 → ____ 문제. (사실 / 행동)
답: 행동 문제다. 그래서 처방은 ____ 다. (자료 붙이기 / 모델 가르치기)
# 형식이 자꾸 틀림 → 행동 문제 → 모델을 ____ 한다
# 빈칸: finetune
________(model, 양식_예시)
(답: 행동 / 모델 가르치기 / finetune)
예시 3 — 독립적용(혼자 풀기).
상황: 모델이 "어제 발표된 신제품" 을 물으니 모른다고 한다.
스스로 물어보자. 이건 사실 문제인가, 행동 문제인가?
그래서 자료를 붙여야 하나, 모델을 가르쳐야 하나?
(힌트: 모델이 모르는 정보다. 처방은 가장 가벼운 쪽이다.)
미니 시나리오 — 이럴 때 이렇게.
"모델 답이 이상해요" 라는 말을 들으면, 고치기 전에 한 줄만 물어보자.
"내용을 몰라서 틀렸나요, 형식만 틀렸나요?"
전자면 자료를 붙이고, 후자면 그때 비로소 가르칠 준비를 한다.
개념 2 — 왜 무거울까: 메모리 병목
망가지는 장면
행동 문제가 맞아서 드디어 모델을 가르치기로 했다.
쓸 때는 잘 돌던 모델인데, 가르치려고 하자마자 "메모리 부족" 으로 멈췄다.
분명 똑같은 모델인데, 쓰는 것과 가르치는 것은 책상 크기가 완전히 달랐던 것이다.
일상비유
요리를 먹기만 할 때는 접시 하나면 된다(쓰기 = 추론).
그런데 새 요리법을 연습할 때는 다르다.
재료, 중간 결과물, 고쳐 볼 메모, 비교용 견본까지 책상에 다 펼쳐야 한다(가르치기 = 학습).
같은 부엌이라도 연습할 때 책상이 훨씬 더 모자란다.
| 비유 | 코드 | 위험 |
|---|---|---|
| 먹기만 함(접시 하나) | model.run(prompt) |
책상 적게 씀 — 추론은 가볍다 |
| 연습함(책상 가득 펼침) | finetune(model, 예시) |
책상이 몇 배 필요 — 메모리 병목 |
| 큰 모델을 좁은 책상에서 연습 | finetune(거대모델) |
책상 모자라 중단 — 가장 흔한 사고 |
한 문장 정의 — 메모리 병목은 모델을 가르칠 때(학습) 쓰기(추론)보다 책상(메모리)이 몇 배 더 필요해 일이 막히는 현상이며, 파인튜닝이 어려운 가장 큰 이유다.
예시 폭격
예시 1 — 완성예(따라 읽기).
쓰기만 할 때 책상에 올리는 것: 모델 숫자(가중치) 하나뿐.
가르칠 때 책상에 올리는 것: 가중치 + 고칠 방향 메모 + 비교용 견본 + 중간 계산.
올리는 짐이 늘었으니 책상도 그만큼 더 든다.
# 쓰기: 모델만 책상에 → 가볍다
model.run(prompt)
# 가르치기: 모델 + 메모 + 견본 + 중간값 → 무겁다
finetune(model, examples)
예시 2 — 부분완성(빈칸 채우기).
쓰기(추론)는 책상이 ____ 든다. (적게 / 많이)
가르치기(학습)는 책상이 ____ 든다. (적게 / 많이)
그래서 좁은 책상에서 큰 모델을 가르치면 ____ 가 일어난다.
# 좁은 책상에서 큰 모델을 가르치면?
finetune(거대모델) # → ________ 부족으로 중단
(답: 적게 / 많이 / 메모리 병목 / 메모리)
예시 3 — 독립적용(혼자 풀기).
같은 모델로 두 가지를 한다. (가) 사용자 질문에 답하기. (나) 새 양식 가르치기.
둘 중 어느 쪽이 책상을 더 많이 차지할까?
좁은 노트북에서 멈춘다면, 그건 (가)일까 (나)일까?
(힌트: 짐이 많은 쪽이 더 무겁다.)
미니 시나리오 — 이럴 때 이렇게.
"잘 돌던 모델인데 가르치려니 멈춰요" 라는 말을 들으면 당황하지 말자.
쓰기와 가르치기는 책상 크기가 다르다는 걸 떠올린다.
해결책은 다음 개념이다. 책상을 넓히는 대신, 짐을 줄인다.
개념 3 — 어떻게 가볍게 할까: 부분만 고치기와 양자화
망가지는 장면
좁은 책상 때문에 막혔다.
그렇다고 더 큰 컴퓨터를 사자니 돈이 많이 든다.
여기서 발상을 바꾼다. 책상을 넓히는 대신, 책상에 올리는 짐 자체를 줄이면 된다.
일상비유
방법 하나 — 옷 전체를 새로 짓지 말고 단추만 바꾼다(부분만 고치기 = LoRA).
옷(모델 대부분)은 그대로 두고, 작은 단추(부분 가중치)만 새로 학습하면 책상이 확 줄어든다.
방법 둘 — 숫자를 거칠게 적는다(양자화).
"3.14159" 를 "3.1" 로 줄여 적듯, 가중치 숫자의 정밀도를 낮추면 짐이 가벼워진다.
| 비유 | 코드 | 위험 |
|---|---|---|
| 단추만 바꿈(부분만 고치기) | finetune(model, only="작은_부속") |
좁은 책상에서도 됨 — 거의 같은 효과 |
| 숫자를 거칠게 적음(양자화) | load(model, precision="거침") |
짐 절약 — 너무 거칠면 품질 살짝↓ |
| 둘 다 안 씀(전체를 정밀하게) | finetune(거대모델_전부) |
가장 무거움 — 좁은 책상에선 불가 |
한 문장 정의 — 부분만 고치기(LoRA)는 작은 부속만 학습하고, 양자화는 숫자를 거칠게 적어, 둘 다 책상(메모리)에 올리는 짐을 줄여 좁은 환경에서도 파인튜닝을 가능하게 한다.
예시 폭격
예시 1 — 완성예(따라 읽기).
전체를 고치면 수십억 개 숫자를 전부 책상에 펼쳐야 한다.
부분만 고치면 그중 아주 작은 일부만 펼친다.
# 전체 고치기 → 책상 가득
finetune(model, all_weights)
# 부분만 고치기 → 작은 부속만 책상에
finetune(model, only="작은_부속") # 같은 효과, 짐은 가볍게
작은 부속만 새로 배웠는데도 효과는 거의 같았다.
예시 2 — 부분완성(빈칸 채우기).
책상이 모자랄 때 첫 번째 처방은 전체 대신 ____ 만 고치는 것이다. (작은 부속 / 더 큰 컴퓨터)
두 번째 처방은 숫자를 더 ____ 게 적는 것이다(양자화). (정밀하 / 거칠)
# 처방 1: ____ 만 고친다
finetune(model, only="________")
# 처방 2: 숫자를 거칠게 → 양자화
load(model, precision="거침")
(답: 작은 부속 / 거칠 / 작은_부속)
예시 3 — 독립적용(혼자 풀기).
노트북에서 모델을 가르치려는데 "메모리 부족" 이 떴다.
돈을 더 쓰지 않고 시도할 수 있는 처방 두 가지는 무엇일까?
각 처방이 "짐을 줄인다" 는 큰 그림에 어떻게 들어맞는지 한 줄로 말해 보자.
(힌트: 하나는 고칠 양을 줄이고, 하나는 숫자를 줄인다.)
미니 시나리오 — 이럴 때 이렇게.
좁은 책상에서 막혔을 때 순서는 간단하다.
먼저 전체 대신 작은 부속만 고쳐 본다(부분만 고치기).
그래도 모자라면 숫자를 더 거칠게 적는다(양자화).
둘을 함께 쓰면 노트북급 컴퓨터에서도 큰 모델을 가르칠 수 있다.
가장 단순한 행동 규칙
쉬운 것부터, 안 되면 무거운 것으로.
먼저 말로 시켜 보고(프롬프트), 안 되면 자료를 붙이고(RAG), 그래도 행동이 안 고쳐질 때만 가르친다(파인튜닝).
가르칠 때 책상이 모자라면, 책상을 늘리지 말고 짐을 줄인다(부분만 고치기 → 양자화).
한 걸음 더 ▸ (지금 몰라도 됨)
"여러 번 가르친 모델들을 하나로 합칠 수도 있다", "숫자를 얼마나 거칠게 적어야 품질이 안 깨지나" 같은 균형 판단은 더 깊은 주제다.
지금은 큰 그림 하나만 들고 가면 된다. 원인을 가리고(사실↔행동) → 행동 문제면 가르치되 → 책상이 모자라면 짐을 줄인다.
정리
- 모델이 사실을 몰라 틀리면 자료를 붙이고(RAG), 행동 방식이 틀리면 모델을 가르친다(파인튜닝).
- 가르치기(학습)는 쓰기(추론)보다 책상(메모리)이 몇 배 더 든다. 이게 메모리 병목이다.
- 책상이 모자라면 늘리지 말고 짐을 줄인다. 작은 부속만 고치고(부분만 고치기 = LoRA), 숫자를 거칠게 적는다(양자화).
다음 장 예고 — 가르칠 재료, 즉 좋은 예시 데이터를 어떻게 모으는지 본다. (지금 몰라도 됩니다 — 다음 장에서 풀려요.)
클릭하거나 Space를 눌러 뒤집기